#include<iostream>
#include<string>
using namespace std;
const int N = 2010;
int f[N][N];
string s, t;
int main()
{
	cin >> s >> t;
	int n = s.size();
	int m = t.size();
	//处理初始情况，第一我们要考虑一个串是空串的情况，第二要考虑你不初始化他的所有数都是0
	for (int i = 1;i <= n;i++) f[i][0] = i;//实际更改的次数应该是字符串的长度
	for (int i = 1;i <= m;i++) f[0][i] = i;
	for (int i = 1;i <= n;i++)
	{
		for (int j = 1;j <= m;j++)
		{
			//f状态表示的是两个串1到i和1到j区间的子串相同的最小操作数
			if (s[i - 1] == t[j - 1]) f[i][j] = f[i - 1][j - 1];//最后一个字母相同不需要操作
			else
			{
				 //让他加上这三种操作最小的那种操作
				//首先确定的是三种操作的对象都是最后一个字符
				f[i][j] = min(min(f[i - 1][j] , f[i][j - 1]) , f[i - 1][j - 1])+1;
			}
		}
	}
	cout << f[n][m] << endl;
	return 0;
}